package com.leecode.xiehf.page_01;

/**
 * 给你一个 32 位的有符号整数 x ，返回 x 中每位上的数字反转后的结果。
 * <p>
 * 如果反转后整数超过 32 位的有符号整数的范围 [−231,  231 − 1] ，就返回 0。
 * <p>
 * 假设环境不允许存储 64 位整数（有符号或无符号）。
 * <p>
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/reverse-integer
 */
public class Solution_0007 {

    public static void main(String[] args) {
        Solution_0007 solution_0007 = new Solution_0007();
//        int result = solution_20210306_7.reverse(2147483647);
        int result = solution_0007.reverse(-2143847412);
        assert 7654321 == result;
        System.out.println(result);
    }

    public int reverse(int x) {
        // 不出现64位的所以没法用long来接收
        int result = 0;
        String s = String.valueOf(x);
        int length = s.length();
        int mul = 0;
        int symbol = 0;
        if (s.charAt(0) == '-') {
            symbol++;
        }
        for (int i = symbol; i < length; i++) {
            int c = s.charAt(i);
            int a = c - '0';
            double pow = Math.pow(10, mul);
            // 如果 a > 2肯定超过了
            if (a > Integer.MAX_VALUE / pow) {
                return 0;
            }
            // 剩余可以加的数量
            // 如果是负数 2147483648 正数 2147483647
            if (Integer.MAX_VALUE - a * pow - symbol <= result) {
                return 0;
            }

            result += a * pow;
            mul++;
        }
        return symbol > 0 ? -result : result;
    }
}
